//
//  MainTabBarController.swift
//  Weibo
//
//  Created by 和丰行 on 16/8/3.
//  Copyright © 2016年 和丰行. All rights reserved.
//

import UIKit

class MainTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // 添加子控制器
        addChildViewControllers()
        // 此时 tabBarButton 还没有创建
        print(tabBar.subviews)

    }
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //此时 tabBarButton 都已创建
        print(tabBar.subviews)
        //初始化加号按钮
        setupComposeBtn()
    }
    
    // MARK: - 内部控制方法
    
    /**
     设置加号按钮位置
     */
    func setupComposeBtn() {
        // 1.  添加到tabbar上
        tabBar.addSubview(composeBtn)
        
        // 2. 计算按钮宽度
        let with = tabBar.bounds.width / CGFloat(viewControllers!.count)
        
        // 3. 创建按钮frame
        let rect = CGRect(x: 0, y: 0, width: with, height: tabBar.bounds.height)
        
        // 4.设置按钮frame和偏移量
        composeBtn.frame = CGRectOffset(rect, with * 2, 0)
        
    }
    
    //加号按钮
    private lazy var composeBtn:UIButton = {
        // 1.创建按钮
        let button = UIButton()
        // 2.设置图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: UIControlState.Normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: UIControlState.Highlighted)
        // 3.设置背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: UIControlState.Normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: UIControlState.Highlighted)
        // 4.监听➕按钮点击事件
        button.addTarget(self, action: #selector(MainTabBarController.composeBtnClick), forControlEvents: UIControlEvents.TouchUpInside)
        
        // 5.返回按钮
        return button
    }()
    
    /**
     监听加号按钮点击
     注意:  运行循环监听到事件后，向 VC 发送消息，动态执行 方法，因此不能设置为 private
     */
    func composeBtnClick(){
        print(#function)
    }
    
    /**
     添加所有子控制
     */
    func addChildViewControllers() {
        addChildViewController(HomeTableViewController(), title: "首页", imageName: "tabbar_home")
        addChildViewController(MessageTableViewController(), title: "消息", imageName: "tabbar_message_center")
        // 添加占位控制器
        addChildViewController(NullViewController(), title: "", imageName: "")
        addChildViewController(DiscoverTableViewController(), title: "广场", imageName: "tabbar_discover")
        addChildViewController(ProfileTableViewController(), title: "我的", imageName: "tabbar_profile")
    }
    
    
    /**
     初始化子控制器
     
     :param: childController 需要初始化的子控制器
     :param: title           初始化的标题
     :param: imageName       初始化的图片
     */
    private func addChildViewController(childController: UIViewController, title:String, imageName:String) {
       
        //设置TabBar对应的数据
        childController.tabBarItem.image = UIImage(named: imageName + "_highlighted")
        childController.tabBarItem.selectedImage = UIImage(named: imageName)
       
        //设置导航条对应的数据
        childController.title = title
        // 注意: Xocde7之前只有文字有效果, 还需要设置图片渲染模式
        tabBar.tintColor = UIColor.orangeColor()
        
        //给首页包装一个导航控制器
        let nav = UINavigationController()
        nav.addChildViewController(childController)
        //将导航控制器天价到当前控制器上
        addChildViewController(nav)
    }
}
